package router

import (
	"time"

	"github.com/blog/internal/container"
	"github.com/gin-contrib/cors"
	"github.com/gin-gonic/gin"
)

// 初始化管理路由
func Routers(container container.Container) *gin.Engine {
	engine := gin.Default()
	//engine.Use(cors.Default())
	// 或者使用自定义配置（生产环境推荐）

	// 	当  AllowCredentials: true  时，不能将  AllowOrigins  设置为  "*" 。
	// 这是浏览器安全策略的强制要求：如果允许携带凭证（如 Cookie、Authorization 头），则必须明确指定具体的源（origin），不能是通配符  *

	// engine.Use(cors.New(cors.Config{
	// 	AllowOrigins:     []string{"http://localhost:8080"}, // 明确指定前端地址
	// 	AllowMethods:     []string{"GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"},
	// 	AllowHeaders:     []string{"Origin", "Content-Length", "Content-Type", "Authorization"},
	// 	ExposeHeaders:    []string{"Content-Length"},
	// 	AllowCredentials: true,
	// 	MaxAge:           12 * time.Hour,
	// }))

	//你这段代码是用 Gin 框架配置 CORS（跨域资源共享）的中间件 Cross-Origin Resource Sharing（跨源资源共享

	//如果有多个前端域名，可以写多个： AllowOrigins: []string{"https://app.example.com", "https://admin.example.com"},

	engine.Use(cors.New(cors.Config{
		AllowOrigins:     []string{"*", "http://localhost:8080"},                                // 允许的源，谨慎使用 "*"
		AllowMethods:     []string{"GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"},  // 允许的 HTTP 方法
		AllowHeaders:     []string{"Origin", "Content-Length", "Content-Type", "Authorization"}, // 允许的请求头
		ExposeHeaders:    []string{"Content-Length"},                                            // 允许客户端访问的响应头
		AllowCredentials: true,                                                                  // 是否允许发送 Cookie 等认证信息
		MaxAge:           12 * time.Hour,                                                        // 预检请求结果的缓存时间
	}))

	groupV1 := engine.Group("/v1")
	InitUserRouter(container, groupV1)
	InitPostsRouter(container, groupV1)
	InitCommentsRouter(container, groupV1)
	return engine
}
